#ifndef __TASKQUEUE_H__
#define __TASKQUEUE_H__

#include <queue>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <atomic>

using std::queue;
using std::mutex;
using std::condition_variable;

using Task = std::function<void()>;
class TaskQueue
{
public:
    TaskQueue(size_t size);

    bool empty();
    bool full();
    void push(Task &&taskcb);  //添加任务
    Task pop();                 //获取任务

    void wakeup(); // 唤醒所有等待的线程

private:
    size_t _size;               //队列容量
    queue<Task> _taskQueue;     //任务队列
    mutex _mutex;               //互斥锁
    condition_variable _cond;   //条件变量

    std::atomic<bool> _isWakeup; // 是否唤醒
};

#endif